package com.hengpeng.itfin.domain.draw;

import java.util.List;

import com.hengpeng.common.exception.ServiceResult;
import com.hengpeng.itfinbase.persist.DrawFile;
import com.hengpeng.itfinbase.persist.Drawing;
import com.hengpeng.itfinbase.persist.PaymentProvider;

/**
 * <pre>
 * 提现接口
 * </pre>
 * @author shanguogang
 * @version 1.0, 2015-8-12
 */
public interface DrawProcessor
{
	/**
	 * <pre>
	 * 创建提款文件
	 * </pre>
	 * @param provider 支付提供商编号
	 * @param drawList 批处理的提款记录集
	 * @return 提款文件记录
	 */
	DrawFile createBatchDrawFile(PaymentProvider provider, List<Drawing> drawList);

	/**
	 * <pre>
	 * 处理提款结果文件
	 * </pre>
	 * @param provider 支付提供商编号
	 * @param file 提款文件记录
	 */
	void downBatchDrawFileResult(PaymentProvider provider, DrawFile file);

	/**
	 * <pre>
	 * 处理提款结果文件
	 * </pre>
	 * @param provider 支付提供商编号
	 * @param file 提款文件记录
	 */
	void parseBatchDrawResultFile(PaymentProvider provider, DrawFile file);

	/**
	 * <pre>
	 * 上传提款文件
	 * </pre>
	 * @param provider 支付提供商编号
	 * @param file 提款文件记录
	 * @return 提款文件记录
	 */
	DrawFile uploadBatchDrawFile(PaymentProvider provider, DrawFile file);

	/**
	 * <pre>
	 * 单笔提款交易请求
	 * </pre>
	 * @param drawing 提款记录
	 * @return 提款记录
	 */
	ServiceResult<Drawing> singleDrawRequest(Drawing drawing);

	/**
	 * <pre>
	 * 单笔提款查询请求
	 * </pre>
	 * @param drawing 提款记录
	 * @return 提款记录
	 */
	Drawing singleDrawQueryRequest(Drawing drawing);
}
